package com.ruben.strategies;

import java.util.Map;

/**
 * 登录执行器
 * 上下文定义了客户端关注的接口。
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/10/16 18:36
 */
public class LoginExecutor {

    private ILoginStrategy loginStrategy;

    /**
     * 上下文通常会通过构造函数来接收策略对象
     *
     * @param loginStrategy 登录策略
     */
    public LoginExecutor(ILoginStrategy loginStrategy) {
        this.loginStrategy = loginStrategy;
    }

    /**
     * 同时还提供设置器以便在运行时切换策略。
     *
     * @param loginStrategy 登录策略
     */
    public void setLoginStrategy(ILoginStrategy loginStrategy) {
        this.loginStrategy = loginStrategy;
    }

    /**
     * 执行登录
     * 上下文会将一些工作委派给策略对象，而不是自行实现不同版本的算法。
     *
     * @param param 登录参数
     * @return token
     */
    public String executeLogin(Map<String, Object> param) {
        System.out.println("校验参数合法性...");
        return loginStrategy.login(param);
    }
}
